home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_11_12
/
allison
/
string.hpp
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-10
|
2KB
|
98 lines
LISTING 1 - String Class Definition and Inline Functions
#if !defined(STRING_HPP)
#define STRING_HPP
#include <stddef.h>
#include <assert.h>
class istream;
class ostream;
const size_t NPOS = (size_t) -1; // "SIZE_T_MAX"
class string
{
public:
// Constructors / Destructor
string();
string(const string& s);
string(const char *s, size_t n = NPOS);
~string();
// Assignment
string& operator=(const string& s);
// Concatenation
string& operator+=(const string& s);
friend string operator+(const string& s1, const string& s2);
// Predicates
friend int operator==(const string&, const string&);
friend int operator!=(const string&, const string&);
// Subscripting
char get_at(size_t pos) const;
void put_at(size_t pos, char c);
string substr(size_t pos, size_t n = NPOS) const;
// Searching
size_t find(const string& s, size_t pos = 0) const;
size_t find_first_of(const string& s, size_t pos = 0) const;
size_t find_first_not_of(const string& s, size_t pos = 0)
const;
// I/O
friend ostream& operator<<(ostream&, const string&);
friend istream& operator>>(istream& is, string&);
// Miscellaneous
size_t length() const;
const char *c_str() const;
private:
char *data;
size_t count; // Doesn't include terminating 0
void clone(const char *s, size_t n);
};
inline string::string()
{
*(data = new char[1]) = '\0';
count = 0;
}
inline string::string(const string& s)
{
clone(s.data,s.count);
}
inline string::~string()
{
delete [] data;
}
inline string operator+(const string& s1, const string& s2)
{
string s(s1);
return s += s2;
}
inline char string::get_at(size_t pos) const
{
assert(pos < count);
return data[pos];
}
inline size_t string::length() const
{
return count;
}
inline const char * string::c_str() const
{
return data;
}
#endif